package com.anlu.base.jdk.jdk8;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;

public class Jdk8StreamTest {

    public static void main(String[] args) {

//        test1();

//        test2();

//        test4();

        test5();
    }

    static void test1(){
        // 一个List集合中存储有以下数据:张无忌,周芷若,赵敏,张强,张三丰
        // 需求:1.拿到所有姓张的 2.拿到名字长度为3个字的 3.打印这些数据
        List<String> list = Arrays.asList("张无忌", "周芷若", "赵敏", "张强", "张三丰");
        // 1.拿到所有姓张的
        ArrayList<String> zhangList = new ArrayList<>(); // {"张无忌", "张强", "张三丰"}
        for (String name : list) {
            if (name.startsWith("张")) {
                zhangList.add(name);
            }
        }
        // 2.拿到名字长度为3个字的
        ArrayList<String> threeList = new ArrayList<>(); // {"张无忌", "张三丰"}
        for (String name : zhangList) {
            if (name.length() == 3) {
                threeList.add(name);
            }
        }
        // 3.打印这些数据
        for (String name : threeList) {
            System.out.println(name);
        }
    }

    static void test2(){
        // 一个List集合中存储有以下数据:张无忌,周芷若,赵敏,张强,张三丰
        // 需求:1.拿到所有姓张的 2.拿到名字长度为3个字的 3.打印这些数据
        List<String> list = Arrays.asList("张无忌", "周芷若", "赵敏", "张强", "张三丰");
        // 1.拿到所有姓张的
        // 2.拿到名字长度为3个字的
        // 3.打印这些数据
        list.stream()
                .filter(s->s.startsWith("张"))
                .filter(s->s.length() == 3)
                .forEach(s-> System.out.println(s));
        System.out.println("--------------------");
        list.stream()
                .filter(s->s.startsWith("张"))
                .filter(s->s.length() == 3)
                .forEach(System.out::println);// 方法引用
    }

    static void test3(){
        List<String> list = Arrays.asList("张无忌", "周芷若", "赵敏", "张强", "张三丰");
        list.stream().forEach(System.out::println);// 张无忌 周芷若 赵敏 张强  张三丰
    }

    static void test4(){
        List<String> list = Arrays.asList("张无忌", "周芷若", "赵敏", "张强", "张三丰");
        Optional<String> first = list.stream().findFirst();// 找到第一个元素
        System.out.println(first.get());// 张无忌
        Optional<String> any = list.stream().findAny();// 找到任意一个元素
        System.out.println(any.get());// 张无忌
    }

    /**
     * match相关方法用来判断数据是否匹配指定的条件
     */
    static void test5(){
        List<String> list = Arrays.asList("张无忌", "周芷若", "赵敏", "张强", "张三丰");
        boolean anyMatch = list.stream().anyMatch(e -> e.startsWith("赵"));// 元素是否有任意一个满足条件
        boolean allMatch = list.stream().allMatch(e -> e.startsWith("赵"));// 元素是否都满足条件
        boolean noneMatch = list.stream().noneMatch(e -> e.startsWith("赵"));// 元素是否都不满足条件
        System.out.println(anyMatch);// true
        System.out.println(allMatch);// false
        System.out.println(noneMatch);// false

    }
}
